// #include <stdio.h>
// #include <stdlib.h>
// #include <string.h>
// #include<assert.h>
// #include <stdbool.h>
//
// typedef struct Node {
//     int data;
//     struct Node *next;
// }Node;
//
// //创建表头 有表头链表 表头不存数据
// //表头就是结构体变量 创建一个堆区的变量 用指针表示
// Node* create_list() {
//     Node* head = (Node*)malloc(sizeof(Node));
//     assert(head != NULL);
//     head->data = 0;
//     head->next = NULL;
//     return head;
// }
//
// //创建节点 创建结构体变量 把数据加工成节点形式
// Node* create_node(int data) {
//     Node* node = (Node*)malloc(sizeof(Node));
//     assert(node != NULL);
//     node->data = data;
//     node->next = NULL;
//     return node;
// }
//
// void print_list(Node* head) {
//     assert(head != NULL);
//     //因为表头不存放数据 所以是next
//     Node* temp = head->next;
//     while (temp != NULL) {
//         printf("%d\n", temp->data);
//         temp = temp->next;
//     }
// }
//
// void insert_node_from_head(Node* head, int data) {
//     Node* new_node = create_node(data);
//     new_node->next = head->next;
//     new_node->data = data;
//     head->next = new_node;
// }
//
// void insert_node_from_end(Node* head, int data) {
//     Node* new_node = create_node(data);
//     new_node->next = NULL;
//     new_node->data = data;
//     Node* temp = head;
//     while (temp->next != NULL) {
//         temp = temp->next;
//     }
//     temp->next = new_node;
// }
//
// void insert_node_pos(Node* head, int pos, int data) {
//     assert(head != NULL);
//     Node* temp = head->next;
//     Node* pre = head;
//     int i = 0;
//     while (temp->next!=NULL && i<pos) {
//         pre = temp;
//         temp = temp->next;
//         i++;
//     }
//     Node* new_node = create_node(data);
//     pre->next = new_node;
//     new_node->next = temp;
//
// }
//
// void remove_node_from_head(Node* head) {
//     if (head->next == NULL) {
//         return;
//     }
//
//     Node* n = head->next->next;
//     free(head->next);
//     head->next = n;
// }
//
// void remove_node_from_end(Node* head) {
//     Node* temp = head;
//     Node* prev = NULL;
//     while (temp->next != NULL) {
//         prev = temp;
//         temp = temp->next;
//     }
//     if (prev!=NULL) {
//         prev->next = NULL;
//         free(temp);
//     }
//
// }
//
//
//
//
// int main() {
//     Node* head = create_list();
//     insert_node_from_head(head, 1);
//     insert_node_from_head(head, 2);
//     insert_node_from_head(head, 3);
//     insert_node_pos(head,0,10);
//     print_list(head);
//
//
//
//     return 0;
// }